package com.iaz.tech.tools.business.prolog;

import lombok.Data;

/**
 * 用于逻辑判断，
 * 参考Prolog 语音，用面向对象实现
 * 实现复杂的知识库的解析和处理。
 * 
 * 
 * 2.1 常量和变量
 * Prolog 的变量和常量规则很简单：小写字母开头的字符串，就是常量；大写字母开头的字符串，就是变量。
 * 
 * ?- write(abc).
 * abc
 * true.
 * ?- write(Abc).
 * _3386
 * true.
 * 上面代码中，abc是常量，输出就是自身；Abc是变量，输出就是该变量的值。
 * 
 * 2.2 关系和属性
 *  两个对象之间的关系，使用括号表示。比如，jack 的朋友是 peter，写成friend(jack, peter).。
 *  注意，jack 的朋友是 peter，不等于 peter 的朋友是 jack。如果两个人都认为对方是朋友，要写成下面这样。
 *  friend(jack, peter).
 *  friend(peter, jack).  
 *  如果括号里面只有一个参数，就表示对象拥有该属性，比如 jack 是男性，写成male(jack).
 *  2.3 规则
 *  规则是推理方法，即如何从一个论断得到另一个论断。
 *  举例来说，我们定下一条规则：所有朋友关系都是相互的，规则写成下面这样。
 *    friend(X, Y) :- friend(Y,X).
 *  上面代码中，X和Y都是大写，表示这是两个变量。符号:-表示推理关系，含义是只要右边的表达式friend(Y, X)为true，那么左边的表达式friend(X, Y)也为true。
 *  因此，根据这条规则，friend(jack, peter)就可以推理得到friend(peter, jack)。如果一条规则取决于多个条件同时为true，则条件之间使用逗号分隔。
 *    mother(X, Y) :- child(Y,X), female(X).
 *  上面代码中，X是Y的母亲（mother(X, Y)）取决于两个条件：Y是X的小孩，X必须是女性。只有这两个条件都为true，mother(X, Y)才为true。
 *  如果一条规则取决于某个条件为false，则在条件之前加上\+表示否定。  
 *    onesidelove(X, Y) :- loves(X, Y), \+ loves(Y,X).
 *  上面代码中，X单相思Y，取决于两个条件。第一个条件是X喜欢Y，第二个条件是Y不喜欢X。
 *  2.5 查询
 *  Prolog 支持查询已经设定的条件。我们先写一个脚本hello.pl。
 *      friend(john, julia).
 * 		friend(john, jack).
 * 		friend(julia, sam).
 *  	friend(julia, molly).
 *  listing()函数可以列出所有的朋友关系。
 *  
 *  
 *  
 */
@Data
public class KnowledgePrologTools {
	/**
	 * 执行Prolog 语言，用于确定语句执行正确。
	 * @param prolog_language
	 * @return
	 */
	public static boolean executeProlog(String prolog_language) throws Exception {
		boolean result = false;
		try {
			
			
		} catch (Exception e) {
			
		}
		return result;
	}
	
}
